# # 实现一个文件查找工具
# # 输入要查找的路径，输入要搜索的文件名(--部分)
# # 自动的在指定的路径中进行查找
#
# import os
# inputPath = input('请输入要搜索的路径：')
# pattern = input('请输入要搜索的关键词：')
#
# for dirpath, dirnames, filenames in os.walk(inputPath):
#     # # 看一下OS的遍历操作
#     # print(f'---------------------------------')
#     # print(f'dirpath = {dirpath}')
#     # print('dirnames:')
#     # for name in dirnames:
#     #     print(name)
#     # print('filenames:')
#     # for name in filenames:
#     #     print(name)
#
#     # 实际查找
#     for f in filenames:
#         if pattern in f:
#             print(f'{dirpath}/{f}')

# # 制作二维码
# import qrcode
#
# img = qrcode.make('腹有诗书气自华，别辜负青春，我们还年少，多学习，多充实自己，未来的天下是我们年轻人的！！！')
# img.save('code.png')

# # 使用 python 操作 excel
# import xlrd3
# # 1.打开xlsx文件
# xlsx = xlrd3.open_workbook("success.xlsx")
# # 2.获取到指令的标签页
# table = xlsx.sheet_by_index(0)
# # 3.获取到表格中有多少行
# nrows = table.nrows
# # print(nrows)
# # 4.进行循环统计操作
# total = 0
# count = 0
# for i in range(1, nrows):
#     # 拿到当前同学的班级 id
#     classId = table.cell_value(i, 1)
#     # print('----------------------------------')
#     # print(table.cell_value(i, 0))
#     # print(table.cell_value(i, 1))
#     # print(table.cell_value(i, 2))
#
#     if classId == 1:
#         total += table.cell_value(i, 2)
#         count += 1
# print(count)
# print(f'平均分：{total / count}')


# -------------------------------------------------------------------------------------

# 学生管理系统  ---  命令行版本的学生管理系统
import os.path
import sys
# 使用这个全局变量来管理所有学生信息
# 每个学生的信息都是一个字典，每个字典就分别表示一个学生
students = []
def save():
    """
    用于存档
    """
    with open('student.txt', 'a', encoding='utf8') as f:
        for s in students:
            f.write(f"{s['student_id']}\t{s['name']}\t{s['gender']}\t{s['class_name']}\n")
        print(f"【存档成功】 共存储了{len(students)}条操作")


def load():
    """
    用于读档
    """
    # 如果读档文件不存在，则直接跳过读档流程
    # 为了避免读方式打开文件，文件不存在而出现异常
    if not os.path.exists('student.txt'):
        return
    # 读档的时候要保证把旧的数据给清理干净!
    global students
    students = []
    with open('student.txt', 'r', encoding='utf8') as f:
        for line in f:
            # 对这一行数据，按照 \t 进行切割操作！
            # 切分之前，要去掉开头和末尾空白符
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f"当前行格式存在问题！ line={line}")
                continue
            student = {
                'student_id': tokens[0],
                'name': tokens[1],
                'gender': tokens[2],
                'class_name': tokens[3],
            }
            students.append(student)
    print(f'【读档成功】 共读取了{len(students)}条记录！')


def menu():
    print('1.新增学生')
    print('2.显示学生')
    print('3.查找学生')
    print('4.删除学生')
    print('0.退出程序')
    choice = input('请输入您的选择：')
    return choice


def insert():
    print("【新增学生】开始！")
    student_id = input("请输入学生的学号：")
    name = input("请输入学生的姓名：")
    gender = input("请输入学生的性别：")
    if gender not in ('男', '女'):
        print('性别输入不匹配，新增失败！')
        return
    class_name = input("请输入学生的班级：")
    # 使用一个字典，把上述信息组装在一起
    student = {
        'student_id': student_id,
        'name': name,
        'gender': gender,
        'class_name': class_name
    }
    global students
    students.append(student)
    # 增加保存操作
    save()
    print("【新增学生】完毕！")


def show():
    # 遍历全局变量的这个列表，把每个学生的信息打印出来
    print('【显示学生】 开始')
    for s in students:
        print(f"[{s['student_id']}]\t{s['name']}\t{s['gender']}\t{s['class_name']}")
    print(f'【显示学生】 完毕! 共显示了{len(students)}条数据！')


def find():
    # 根据学生的姓名，来进行查找
    print("【查找学生】 开始！")
    name = input("请输入要查找得到学生姓名：")
    count = 0
    for s in students:
        if name == s['name']:
            print(f"[{s['student_id']}]\t{s['name']}\t{s['gender']}\t{s['class_name']}")
            count += 1
    print(f"【查找学生】 结束！共找到了{count}个学生信息")


def delete():
    print("【删除学生】 开始！")
    student_id = input("请输入要删除学生的学号：")
    # 找这个学号对应的字典，然后删掉即可
    for s in students:
        if student_id == s['student_id']:
            print(f"删除{s['name']}学生的信息!")
            students.remove(s)
    save()
    print("【删除学生】 结束！")


def main():
    """
    入口函数
    """
    print('---------------------------------------')
    print('---------- 欢迎来到学生管理系统 -----------')
    print('---------------------------------------')
    # 需要在程序启动的时候调用 load 即可~
    load()
    while True:
        # 通过menu函数打印菜单
        choice = menu()
        if choice == '1':
            # 新增学生
            insert()
        elif choice == '2':
            # 显示所有学生
            show()
        elif choice == '3':
            # 查找学生
            find()
        elif choice == '4':
            # 删除学生
            delete()
        elif choice == '0':
            # 退出程序
            print('goodbye!')
            sys.exit(0)
        else:
            print('您的输入有误：')
            # 进入下次循环，让用户重新输入


main()
